home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
szgyt
/
mark-1.txt
< prev
next >
Wrap
Text File
|
1996-03-20
|
11KB
|
238 lines
MARK-I
Az angol számítástechnika akkor kapott újabb lendületet, mikor a második
világháború befejeztével a német rádióadások megfejtésén dolgozó szakemberek
békésebb munka után néztek. (A rejtjelek megfejtésére több gépet is készítettek
a háború alatt, ezeket azonban kifejezetten kódfeltörésre tervezték. Részletes
mûszaki leírásuk ma is titkos, így nem lehet pontosan megmondani, mennyire
illik rá ezekre a masinákra a "számítógép" név. Az azonban valószínû, hogy e
kutatás kapcsán szerzett tapasztalatoknak hasznát vették az elsô számítógépek
tervezésénél.)
Két egykori "kódfeltörô", név szerint F. C. Wiliams és T. Killbrun a
Manchesteri Egyetemen kaptak állást, ahol idejüket egy elektronikus számítógép
összetákolásával töltötték. Valóban "tákolásról" volt szó, nem vesztegették az
idôt a precíz munkára, ami aztán meg is látszott a megbízhatóságon. (A gép alig
pár órát mûködött hiba nélkül: az üzemeltetési napló szerint a folyamatos
hibátlan mûködés rekorja kilenc óra volt.)
[Image]
A gépen 1948 június 21.-én sikerrel futtatták le a világ elsô programját. A
sikertôl bátorítva a gépet továbbfejlesztették és hamarosan elkészült a nagyobb
tárkapacitású, MARK I névre keresztelt számítógép.
A MARK I minden lényeges alapevet és szerkezeti elemet tartalmazott, amelyek a
mai számítógépek alapját képezik. A számokat binárisan ábrázolták, bár manapság
szokásossal éppen ellentétes módon. (A legkisebb helyiértékû bit a bal szélsô.)
A teljes memóriakapacitás 256 szó, a szóhosszúság 40 bit volt. (Kivétel az
akkumulátor, ami 80 bites.) A CPU teljes egészében elektroncsövekbôl (több mint
négyezer darab triódákból és pentódákból) épült fel, 25 kW teljesítményt
fogyasztva.
Memóriaként un. Williams-csöveket használtak. Ez a TV képernyôjéhez hasonló
foszforral bevont katódsugárcsô: az elektonsugárral villamos töltést lehet
létrehozni a foszforrétegben, amit ugyancsak az elektronsugár segítségével ki
lehet olvasni. Bármikor bármelyik pontot olvashatjuk vagy írhatjuk, tehát a
szerkezet RAM-ként használható. Mivel a töltés elszivárog, a beírt információt
bizonyos idôközönként frissíteni kell. A Williams csövet éppen az tette
alkalmassá adattárolásra, hogy tervezôjének sikerült viszonylag egyszerû és
megbízható módszert kitalálnia a frissítésre. Az adatokat tároló pontok a
foszfor bevonat miatt világítottak, így szabad szemmel is le lehetett olvasni a
csôbe beírt adatokat. A MARK I-ben használt Williams csövek 32 darab negyven
bites szót tároltak.
Ha figyelmesen szemügyre vesszük a MARK I egyik Williams csövének fényképét,
akkor a 32 darab teljes hosszúságú szó mellett a képernyô tetején látunk még
egy 20 bites szót is. Ez a 20 bit a világ elsô "page address"-e. A csövek
tartalmát ugyanis el lehetett menteni egy mágnesdobos ôs-winchesterre, és ez a
cím mondta meg, hogy a másolat a mágnesdob melyik sávjában van. Ebbôl nôtt ki
aztán a virtuális címzés és a "memory swapping".
A géppel egy 5 bites lyukszalag olvasón, vagy a mérnöki pulton keresztül
lehetett tárgyalni (ez utóbbi 20 db kapcsolóból állt, amit a gép egy
utasítással le tud olvasni). Kimeneti eszközként egy szalaglyukasztó és egy
nyomtató szolgált.
Manchesteri látogatása során a MARK I annyira lenyûgözte a kormány egyik
tudományos tanácsadóját, hogy pár nap alatt tetô alá hozott egy államilag
támogatott programot, amelynek keretében a Ferranti Ltd. vállalat gyártani
kezdte a gépet. Ezzel a MARK I lett a világ elsô sorozatban gyártott,
kereskedelmi forgalomba hozott elektronikus számítógépe. (Nagy üzlet nem
lehetett, hat év alatt kilenc darabot adtak el belôle.)
Az elsô Ferranti MARK I-et a Manchesteri Egyetemen helyezeték üzembe, és mivel
a gép teljesítménye meghaladta az egyetem számítási igényeit, külsô
felhasználók számára is végeztek számításokat. Egy Dr. Glennie például az
atombombák tökéletesítéséhez szükséges számításokat végzett a MARK I-en,
természetesen a legnagyobb titokban. (Munka után még a nyomtató festékszalagját
is el kellett égetnie.)
Akkoriban még egyetlen programozási nyelv sem létezett, az assembly "fordítást"
maga a programozó végezte úgy, hogy az utasítások bináris kódjainak megfelelô
ASCII karaktereket begépelte egy konzolírógépen. Ezt a módszert Alan Turing
vezette be, aki a háború idején végtelen órákat töltött el a rejtjelezett német
rádióüzenetek öt bites kódjainak bogarászásával, így valószínûleg fel sem tûnt
neki, hogy számítógépe utasításait csupa könnyen megjegyezhetô néven hívják
mint: T/, /N, T:, stb.
A felhasználók azonban aligha lehettek ilyen bensôséges viszonban az ASCII
kódtáblával, így az egyik különösen sokat számoló user (történetesen a már
említett atombomba-számításokat végzô Dr. Glennie) 1954-ben saját szakállára
elkészítette a MARK I elsô assembler fordítóját. Ezt követte két évvel késôbb
R. A. Brooker "autocode" nevû nyelve, amely már minden felhasználó számára
rendelkezésre állt.
A MARK I gépet több ezer óra hasznos és haszontalan számítás után végül
1959-ben bontották le. (Túlságosan magas volt az egyetem villanyszámlája :-)
Idôközben sokkal kisebb fogyasztású, nagyobb teljesítményû és olcsóbb gépeket
építettek, így a gép nyolc év alatt teljesen elavulttá vált.
A MARK I-et természetesen komoly matematikai számításokra használták, de az
akkor még rendkívû értékes gépidôt már akkoriban elkezdték játékprogramok
fejlesztésére használni. Példaként íme itt egy angol nyevlû szerelmeslevél,
amit a MARK I-en futó program "írt", a gép véletlenszám generátorának
segítségével válogatva össze a kifejezéseket. (Csapnivalóan rossz
szerelmeslevél író vagyok, ezért meg sem kísérlem lefordítani):
Darling Sweethart,
You are my avid fellow feeling. My affection curiously clings to your
passionate wish. My liging yearns to your hart. You are my wistful symphaty: my
tender liking.
Yours beautifully,
Manchester University Computer
-------------------------------------------------------------------------------
A világ elsô programja
Az itt látható programot tartják (az eredeti kéziraton feltüntetett dátum
alapján) a világ legelsô elektronikus számítógépre írt programjának. A program
1948. június 21.-én produkált elôször használható eredményt, amihez pontosan 52
percre volt szüksége.
Az algoritmus egy szám (a) legnagyobb osztóját keresi meg úgy, hogy egy
megadott kezdôértéktôl (b) indulva megvizsgálja, hogy a osztható-e b-vel. Ha
nem, akkor b értékét eggyel csökkenti és újra próbálkozik. (Az oszthatóság
vizsgálata úgy történik, hogy b értékét egy ciklusban levonjuk az a-ból és
megnézzük, hogy a maradék nagyobb-e nullánál.)
Az a szám a 23-as, a b kezdôérték pedig a 24-es memóriaszóbam található. A 20,
21 és 22 szavak a program konstansait tárolják. C jelenti az akkumulátort, cl
pedig a programszámlálót. A test utasítás kihagyja a soron következô utasítást,
ha az akkumulátor tartalma negatív.
no operation C 25 26 27
1 -24 to C -b
2 C to 26 -b
3 -26 to C b
4 C to 27 -b b
5 -23 to C a r(n-1) -b(n) b(n)
6 sub 27 a - b(n)
7 test
8 add 20 to cl
9 sub 26 r(n)
10 C to 25 r(n)
11 -25 to C
12 test
13 stop 0 0 -b(N) b(N)
14 -26 to C b(n) r(n) -b(n) b(n)
15 sub 21 b(n)-1
16 C to 27 b(n+1) b(n+1)
17 -27 to C -b(n+1)
18 C to 26 -b(n+1)
19 22 to cl r(n) -b(n+1) b(n+1)
20 -3
22 1
22 4
23 -a
24 b
initfinal
25 - r(N) (=0)
26 - -b(N)
27 - b(N)
Érdemes megfigyelni, hogy a programozónak milyen trükköket kellett bevetnie,
hogy a szegényes utasításkészlettel meg tudja oldani a feladatot. A program a
13. sorban áll le, a 12. sorban lévô test utasítás miatt akkor kerül ide a
vezérlés, ha az akkumulátorban nulla, vagy annál nagyobb szám van. Az
algoritmusból azonban következik, hogy ezen a ponton az akkumulátor tartalma
csak nulla vagy negatív szám lehet - tehát a progam csak akkor ér véget, ha az
akkumulátor tartalma (vagyis az osztás maradéka) zérus.
A MARK I utasításkészlete
A gép utasításai 20 bitesek, ebbôl az elsô tíz bit cím, három bit a nyolc darab
"B-line" (index regiszter) kiválasztására szolgál, egy bit nem használt, a
maradék hat pedig az utasítás kódját adja meg.
A listában használt rövidítések jelentése a következô:
ACC akkumulátor (80 bites)
AM az akkumulátor felsô negyven bitje
AL az akkumulátor alsó negyven bitje
S az utasítás cím részével megcímzett memóriaszó
(store line) tartalma. Az indexregiszterekre kiadott
utasítások csak a 20 legkisebb helyiértékû bitet használják,
a vezérlésátadó utasítások pedig csak a 10 legkisebb
helyiértékû bitet.
B egy B-line (indexregiszter) tartalma
H a mérnöki pult 20 kapcsolóján beállított bináris szám
LDA load AL (AM cleared)
LDAS load AL, sign extended into AM
LDN load AL negatively
STA store AL
STM store AM
STMC store AM and clear AM
SWAP interchange AM and AL
STAM store AL, move AM to AL and clear AM
STAC store AL and clear ACC
CLR clear ACC
ADD ACC := ACC + S (signed S)
ADDU ACC := ACC + S (unsigned S)
SUB ACC := S (signed S)
ADDM AM := AM + S
LDDU load D (unsigned multiplicant)
LDDS load D (signed multiplicant)
MADU ACC := ACC + D x S (unsigned S)
MADS ACC := ACC + D x S (signed S)
MSBU ACC := ACC - D x S (usigned S)
MSBS ACC := ACC - D x S (signed S)
AND ACC := ACC AND S (S sign extended)
ORA ACC := ACC OR S (S sign extended)
NEQ ACC := ACC XOR S (S sign extended)
SHLS ACC := 2 x S (arithmetic shift)
ORS S := AL OR S, := AL
ORSC S := AL OR S, then clear ACC
LDB load specified B-line
STB store specfied B-line
SUBB B := B - S
LDBX load B-line (without modification)
STBX store B-line (without modification)
SBBX B := B - S (without modification)
JMPA absolute indirect unconditional jump
JMPR relative indirect unconditional jump
JGEA if ACC positive, absolute indirect jump
JGER if ACC positive, relative indirect jump
JGBA if (last-named B-line positive), absolute indirect jump
JGBR if (last-named B-line positive), relative indirect jump
IOTH I/O transfer using H as control word
IOTS I/O transfer using S as control word
NORM add to AM the position of the most significant one in S
SADD add to AM the number of 1st in S - population count
RNDM load a random number into AL
LDAD load a page address word into AL
DST1 debugging stop (1)
DST2 debugging stop (2)
TIME S := clock
HOOT pulse the console hooter
STH S := console handswitches H
NULL no operation